ceae90f78068f7a11ed546f1fd23ada51466ac6f,java/java-impl/src/com/intellij/codeInsight/completion/SmartCompletionDecorator.java,SmartCompletionDecorator,computeTailType,#InsertionContext#,49
Before Change
TailType cached = itemType;
int cachedPrior = 0;
if (type != null && type.isValid()) {
for (ExpectedTypeInfo info : myExpectedTypeInfos) {
final PsiType infoType = info.getType();
if (PsiType.VOID.equals(infoType)) {
cached = info.getTailType();
continue;
}
if (infoType.equals(type) && cachedPrior < 2) {
cachedPrior = 2;
cached = info.getTailType();
}
else if (cachedPrior == 2 && cached != info.getTailType()) {
cachedPrior = 3;
cached = itemType;
}
After Change
Set<TailType> voidTyped = new HashSet<TailType>();
Set<TailType> sameTyped = new HashSet<TailType>();
Set<TailType> assignableTyped = new HashSet<TailType>();
for (ExpectedTypeInfo info : myExpectedTypeInfos) {
final PsiType infoType = info.getType();
if (PsiType.VOID.equals(infoType)) {
voidTyped.add(info.getTailType());
} else if (infoType.equals(type)) {
sameTyped.add(info.getTailType());
} else if ((infoType.isAssignableFrom(type) && info.getKind() == ExpectedTypeInfo.TYPE_OR_SUBTYPE) ||
(type.isAssignableFrom(infoType) && info.getKind() == ExpectedTypeInfo.TYPE_OR_SUPERTYPE)) {
assignableTyped.add(info.getTailType());
}
}